const fs = require('fs');
const path = require('path');

// 读取文件并尝试不同编码
function readFileWithEncoding(filePath) {
  const encodings = ['utf8', 'utf16le', 'latin1'];
  
  for (const encoding of encodings) {
    try {
      const content = fs.readFileSync(filePath, encoding);
      console.log(`使用 ${encoding} 编码读取文件成功`);
      return content;
    } catch (error) {
      console.log(`使用 ${encoding} 编码读取失败:`, error.message);
    }
  }
  
  throw new Error('无法读取文件，尝试了多种编码');
}

// 保存格式化的JSON文件
function saveFormattedJson(filePath, content) {
  try {
    // 备份原始文件
    fs.writeFileSync(filePath + '.backup', fs.readFileSync(filePath), 'binary');
    console.log('已备份原始文件到:', filePath + '.backup');
    
    // 格式化并写入文件
    fs.writeFileSync(filePath, content, 'utf8');
    console.log('已保存格式化的JSON文件');
  } catch (error) {
    console.error('保存文件失败:', error.message);
  }
}

// 主函数
function main() {
  const jsonPath = path.join(__dirname, 'manifest.json');
  console.log('开始处理文件:', jsonPath);
  
  let jsonContent = '';
  
  try {
    // 读取文件内容
    jsonContent = readFileWithEncoding(jsonPath);
    
    // 移除BOM（如果有）
    jsonContent = jsonContent.replace(/^\uFEFF/, '');
    
    // 修复常见的JSON格式问题
    // 1. 移除多余的逗号
    jsonContent = jsonContent.replace(/,\s*}\s*/g, '}').replace(/,\s*\]\s*/g, ']');
    
    // 2. 修复引号不匹配的问题（简单处理）
    const quoteCount = (jsonContent.match(/"/g) || []).length;
    if (quoteCount % 2 !== 0) {
      console.log('检测到引号数量不匹配:', quoteCount);
      // 尝试修复不匹配的引号
      let inString = false;
      let escaped = false;
      let fixedContent = '';
      
      for (let i = 0; i < jsonContent.length; i++) {
        const char = jsonContent[i];
        
        if (!escaped && char === '\\') {
          escaped = true;
        } else if (escaped) {
          escaped = false;
        } else if (char === '"') {
          inString = !inString;
        }
        
        fixedContent += char;
      }
      
      // 如果最后仍然在字符串中，添加一个引号
      if (inString) {
        fixedContent += '"';
        console.log('已在末尾添加缺失的引号');
      }
      
      jsonContent = fixedContent;
    }
    
    // 尝试解析JSON来验证格式
    const parsed = JSON.parse(jsonContent);
    console.log('JSON解析成功！');
    
    // 格式化并保存文件
    const formattedJson = JSON.stringify(parsed, null, 4);
    saveFormattedJson(jsonPath, formattedJson);
    
    console.log('文件修复和格式化完成！');
    
  } catch (error) {
    console.error('处理文件时出错:', error.message);
    
    // 尝试查找错误位置
    if (error instanceof SyntaxError && error.message.includes('position')) {
      const match = error.message.match(/position (\d+)/);
      if (match && jsonContent) {
        const position = parseInt(match[1]);
        console.log(`错误位置: ${position}`);
        // 显示错误位置附近的内容
        const contextSize = 50;
        const start = Math.max(0, position - contextSize);
        const end = Math.min(jsonContent.length, position + contextSize);
        console.log('错误位置附近内容:');
        console.log(jsonContent.substring(start, end));
        console.log('^'.padStart(position - start + 1));
      }
    }
  }
}

main();